package org.jaaksi.demo.ptr.api;

import link.module.AgentInfo;
import link.module.ConfigInfoVo;
import link.module.TokenInfo;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import org.jaaksi.demo.ptr.bean.User;
import org.jaaksi.demo.ptr.bean.house.MainResponse;
import org.jaaksi.demo.ptr.bean.response.Result;
import retrofit2.Call;
import retrofit2.http.*;

import java.util.HashMap;
import java.util.List;
import rx.Observable;

/**
 * Created by Fcy on 2016/10/10.<br/>
 */
public interface MockApi {
	@GET("/heiheihei")
	void add(int a, int b);

	/**
	 * 注解@path 动态的url访问
	 * 把{username}当做占位符，而实际运行中会通过@PATH("username")所标注的参数进行替换
	 *
	 * @param username
	 * @return
	 */
	@GET("{username}")
	Call<User> getUser(@Path("username") String username);

	/**
	 * 注解@Query 查询参数的设置，多参数可以使用@QueryMap
	 *
	 * @param city_id
	 * @param limit_offset
	 * @param limit_count
	 * @return
	 */
	@GET("newhouse/apisearch")
	Call<Result<MainResponse>> getMainResponse(
		@Query("city_id") String city_id, @Query("limit_offset") int limit_offset,
		@Query("limit_count") int limit_count);

	/**
	 * 注解@FormUrlEncoded 表单的方式传递键值对
	 * 注解@Field 表单的键，少量参数，参数较多时推荐使用@FieldMap
	 *
	 * @param username
	 * @param password
	 * @return
	 */
	@POST("login")
	@FormUrlEncoded
	Call<Result<TokenInfo>> login(@Field("username") String username, @Field("password") String password);

	/**
	 * 注解 @FieldMap post请求参数较多时
	 *
	 * @param map
	 * @return
	 */
	@POST("login")
	@FormUrlEncoded
	Call<User> login(@FieldMap HashMap<String, String> map);

	/**
	 * 注解@Body POST请求体的方式向服务器传入json字符串
	 *
	 * @param user
	 * @return
	 */
	@POST("add")
	Call<List<User>> addUser(@Body User user);

	/**
	 * 单文件上传
	 * 注解@Multipart @Part
	 *
	 * @param photo
	 * @param username
	 * @param password
	 * @return
	 */
	@Multipart
	@POST("register")
	Call<User> registerUser(@Part MultipartBody.Part photo,
							@Part("username") RequestBody username, @Part("password") RequestBody password);


	@GET("newhouse/config") Observable<Result<ConfigInfoVo>> getConfigResponse(
		@Query("ucId") String ucId);

	@GET("newhouse/agentInfo") Observable<Result<AgentInfo>> getAgentResponse(
		@Query("ucId") String ucId);
}
